<?php
class AccueilController extends Osml_Controller_Action
{

    public function indexAction()
    {
        $request = $this->getRequest();
        $pageEnCours = (int) $request->getParam("page", 1);
        $nombreNewsParPage = Back_Model_Config::recuperationValeurParCle(Osml_Global_Constantes::OSML_CONFIG_HOME_NEWS_NOMBRE, "valeur");
        $model = new Back_Model_News();
        $liste = $model->lister("-creationDate", $pageEnCours, intval($nombreNewsParPage));
        $nbTotal = (int) $model->compter();
        $this->view->listeNews = $liste;
        $this->view->paginatorAfficher = true;
        $this->view->nb = $nbTotal;
        $numpage = $pageEnCours;
        $this->view->numpage = $numpage;
        $tailleliste = $nombreNewsParPage;
        $this->view->tailleliste = $tailleliste;
        $this->view->paginatorModule = "front";
        $this->view->paginatorController = "accueil";
        $this->view->paginatorAction = "index";
        $this->view->paginatorTexte = __('Les news');
        $this->view->entries = $liste;
        $this->view->nbTotal = $nbTotal;
        
        /**
         *
         * @author JND
         * @since 2012-07-14
         */
        $affichageNomAuteurNews = Back_Model_Config::recuperationValeurParCle(Osml_Global_Constantes::OSML_CONFIG_HOME_NEWS_NOM_AFFICHAGE, "valeur");
        switch ($affichageNomAuteurNews)
        {
            case "prenom-nom":
                $methodeAffichageAuteur = "getPrenomNom";
            break;
            case "pseudo":
            default:
                $methodeAffichageAuteur = "getPseudo";
            break;
        }
        $this->view->methodeAffichageAuteur = $methodeAffichageAuteur;
    }

    public function connexionAction()
    {
        $this->view->addicherSidebar = false;
        $request = $this->getRequest();
        $message = __("L'authentification a échoué. Les identifiants fournis n'ont pas été trouvés dans la base de données.");
        $messageTitre = __("Authentification échouée");
        $flagConnexion = false;
        
        $form = new Front_Form_Connect($request->getParams());
        if ($form->isValid($form->getValues())) {
            
            $mdp = $request->getParam("mdp");
            $login = $request->getParam("login");
            $salt = Back_Model_Utilisateurs::recuperationSalt($login);
            
            $db = Jnd_App::getResource("db");
            $adapter = new Zend_Auth_Adapter_DbTable($db, "utilisateurs", "pseudo", "mot_de_passe");
            $adapter->setIdentity($login)->setCredential(Jnd_Outils::generateHash($mdp, $salt));
            
            $result = $adapter->authenticate();
            if ($result->isValid()) {
                $storage = Zend_Auth::getInstance()->getStorage();
                $storage->write($adapter->getResultRowObject(array(
                    "id_utilisateurs", 
                    "nom", 
                    "prenom", 
                    "pseudo"
                ), array(
                    "motdepasse"
                )));
                
                $env = Jnd_App::getEnvironnement();
                $env->idutilisateurs = $storage->read()->id_utilisateurs;
                $env->nom = $storage->read()->nom;
                $env->prenom = $storage->read()->prenom;
                $env->pseudo = $storage->read()->pseudo;
                
                // On récupère les groupes auxquelles l'utilisateurs appartient
                $groupesUtilsateurs = Back_Model_Groupes::chercherParUtilisateur($storage->read()->id_utilisateurs);
                $env->groupes = $groupesUtilsateurs;
                
                // On récupère la liste des roles de l'utilisateur
                $rolesUtilisateurs = array();
                foreach ($groupesUtilsateurs as $groupe) {
                    if (! in_array($groupe['idRole'], $rolesUtilisateurs)) {
                        $rolesUtilisateurs[] = $groupe['idRole'];
                    }
                }
                if (count($rolesUtilisateurs) == 0) {
                    $rolesUtilisateurs[] = Back_Model_Roles::recuperationIdParValeur("membre");
                }
                $env->roles = $rolesUtilisateurs;
                
                // Affiche l'identité
                $message = __("Bon retour") . " " . $env->prenom . " " . $env->nom;
                $messageTitre = __("Authentification réussie");
                $flagConnexion = true;
            }
        }
        $this->view->message = $message;
        $this->view->messageTitre = $messageTitre;
        $this->view->messageFlag = $flagConnexion;
    }

    public function deconnexionAction()
    {
        Zend_Auth::getInstance()->clearIdentity();
        $this->view->addicherSidebar = false;
        Jnd_App::getEnvironnement()->resetInstance();
        $this->redirect("index", "accueil", "front");
    }

    public function enregistrementAction()
    {
        $this->view->addicherSidebar = false;
        $request = $this->getRequest();
        $login = $request->getParam("login");
        $mdp = $request->getParam("mdp");
        
        $values = array(
            "pseudo" => $login, 
            "motDePasse" => $mdp
        );
        $form = new Front_Form_Enregistrement();
        
        if ($request->isPost()) {
            if ($form->isValid($request->getPost())) {
                $model = new Back_Model_Utilisateurs();
                $values = $form->getValues();
                $motDePasse = $values['confirmation'];
                unset($values['confirmation']);
                $model->setOptions($values);
                if ($model->controleExistance()) {
                    $motDePasse = $values['motDePasse'];
                    $hashPwd = Jnd_Outils::generateHash($motDePasse);
                    $model->setMotDePasse($hashPwd);
                    $model->setPseudo($values['pseudo']);
                    $model->setMail($values['mail']);
                }
                $model->sauver();
                
                $mail = Jnd_Mail::factory("utf-8");
                $mail->setFrom("webmaster@lomme-badminton.fr");
                $mail->setSubject(__('Création de votre compte'));
                $mail->addTo($model->getMail(), $model->getPrenomNom() . '<' . $model->getMail() . '>');
                
                $this->view->login = $model->getPseudo();
                $this->view->motDePasse = $motDePasse;
                
                $html = $this->view->render("/accueil/mail/confirmation.phtml");
                $html = preg_replace("#{NEWLINE}#", "<br />", $html);
                
                $mail->setBodyHtml($html);
                $mail->send();
                
                $this->redirect("confirmation");
            }
        } else {
            $form->populate($values);
        }
        $this->view->form = $form;
    }

    public function confirmationAction()
    {
        $request = $this->getRequest();
        $modeConfirmation = $request->getParam("mode", null);
        switch ($modeConfirmation)
        {
            case "jaioublie":
                $this->changerScript("mail/confirmation-jaioublie");
                break;
            case "mailenvoye":
                $this->changerScript("messages/confirmation-mailenvoye");
                break;
            case "enregistrement":
            default:
            break;
        }
    }

    public function moncompteAction()
    {
        $utilisateur = Jnd_App::getEnvironnement()->getUtilisateurCourant();
        if (is_null($utilisateur)) {
            throw new Zend_Exception(__("Vous devez être connecté pour éditer votre compte"));
        }
        
        $moi = new Back_Model_Utilisateurs($utilisateur->getId());
        $form = new Front_Form_Utilisateurs();
        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                if ( $moi->getMail() != $form->getElement("mail")->getValue()) {
                    $mail = Jnd_Mail::factory("utf-8");
                    $mail->setFrom("webmaster@lomme-badminton.fr");
                    $mail->setSubject(__('Modification de mail'));
                    
                    $groupAdmin = Back_Model_Groupes::chercherParNom("ADMINISTRATEURS");
                    foreach( $groupAdmin->getMembres() as $utilisateur) {
                        $model = new Back_Model_Utilisateurs($utilisateur);
                        $mail->addTo($model->getMail(), $model->getPrenomNom() . '<' . $model->getMail() . '>');
                    }
                    $mail->setBodyHtml($moi->getPrenomNom() . " vient de changer son mail ('" . $moi->getMail() . ") en " . $form->getElement("mail")->getValue());
                    $mail->send();
                }
                $moi->setOptions($form->getValues());
                $moi->sauver();
                $this->redirect("index");
            } else {}
        } else {
            $form->populate($moi->toArray());
        }
        
        $this->view->form = $form;
        $this->view->model = $moi;
    }

    public function changementMotDePasseAction()
    {
        $utilisateur = Jnd_App::getEnvironnement()->getUtilisateurCourant();
        if (is_null($utilisateur)) {
            throw new Zend_Exception(__("Vous devez être connecté pour éditer votre compte"));
        }
        
        $moi = new Back_Model_Utilisateurs($utilisateur->getId());
        $form = new Front_Form_Changement();
        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                $moi->setOptions($form->getValues());
                $moi->sauver();
                $this->redirect("index");
            } else {}
        } else {
            $form->populate($moi->toArray());
        }
        
        $this->view->form = $form;
        $this->view->model = $moi;
    }

    public function jaioublieAction()
    {
        $this->view->afficherSidebar = false;
        $request = $this->getRequest();
        $form = new Front_Form_Oubli();
        
        if ($request->isPost()) {
            if ($form->isValid($request->getPost())) {
                $login = $form->getElement("pseudo")->getValue();
                $email = $form->getElement("mail")->getValue();
                $model = Back_Model_Utilisateurs::chargerParCouplePseudoMail($email, $login);
                
                $nouveauMotDePasse = rand(1, 2000) . "-" . strtolower($login) . date("Ymdhis");
                $hashPwd = Jnd_Outils::generateHash($nouveauMotDePasse);
                $model->setMotDePasse($hashPwd);
                $model->sauver();
                
                $mail = Jnd_Mail::factory("utf-8");
                $mail->setFrom("webmaster@lomme-badminton.fr");
                $mail->setSubject(__('Réinitialisation de mot de passe'));
                $mail->addTo($email, $login . '<' . $email . '>');
                
                $this->view->login = $login;
                $this->view->motDePasse = $nouveauMotDePasse;
                
                $html = $this->view->render("/accueil/mail/jaioublie.phtml");
                $html = preg_replace("#{NEWLINE}#", "<br />", $html);
                
                $mail->setBodyHtml($html);
                $mail->send();
                
                $this->redirect("confirmation", "accueil", "front", array("mode" => "jaioublie"));
            }
        }
        
        $this->view->form = $form;
    }
    
    public function generationMenuCompetitionAction () {
        $this->view->competitions = Back_Model_Competitions::competitionsParNiveau();
    }
}

